package com.pethospital.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pethospital.dto.ConversationVO;
import com.pethospital.dto.MessageDTO;
import com.pethospital.entity.Conversation;
import com.pethospital.entity.Message;

import java.util.List;

/**
 * 在线咨询服务接口
 */
public interface ConsultService {

    /**
     * 创建会话
     *
     * @param userId  用户ID
     * @param staffId 医护人员ID
     * @return 会话ID
     */
    Long createConversation(Long userId, Long staffId);

    /**
     * 结束会话
     *
     * @param conversationId 会话ID
     * @param userId         用户ID
     */
    void endConversation(Long conversationId, Long userId);

    /**
     * 获取用户的会话列表
     *
     * @param userId 用户ID
     * @return 会话列表（包含医生信息和消息统计）
     */
    List<ConversationVO> getUserConversations(Long userId);

    /**
     * 获取医护人员的会话列表
     *
     * @param staffId 医护人员ID
     * @return 会话列表（包含用户信息和消息统计）
     */
    List<ConversationVO> getStaffConversations(Long staffId);

    /**
     * 获取会话消息历史
     *
     * @param conversationId 会话ID
     * @param userId         当前用户ID
     * @param page           页码
     * @param size           每页大小
     * @return 消息列表
     */
    Page<Message> getMessages(Long conversationId, Long userId, int page, int size);

    /**
     * 标记消息为已读
     *
     * @param conversationId 会话ID
     * @param userId         当前用户ID
     */
    void readMessages(Long conversationId, Long userId);

    /**
     * 保存消息
     *
     * @param conversationId 会话ID
     * @param messageDTO     消息DTO
     * @return 保存的消息
     */
    Message saveMessage(Long conversationId, MessageDTO messageDTO);
} 